/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pio.action.administrador.preinscripcion;

import pio.action.administrador.preseleccion.*;
import pio.action.administrador.*;
import DBMS.DataBaseManager;
import clases.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

/**
 *
 * @author charles
 */
public class GenerarReporte extends DispatchAction {

    public ActionForward testPDF(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ReporteTestCompletado reporte = new ReporteTestCompletado();
        DataBaseManager dbms = DataBaseManager.getInstance();
        reporte.setTipo(TipoReporte.ASPIRANTE);
        reporte.setNumAutenticacion();
        while (dbms.existeNumAutenticacion(reporte.getNumAutenticacion())) {
            reporte.setNumAutenticacion();
        }
        dbms.agregarReporte(reporte);
        reporte.setId(dbms.buscarID(reporte.getNumAutenticacion()));
        reporte.setAspirantesTestCompletos(dbms.consultarAspirantesTestCompletado());
        reporte.setInstituciones(dbms.consultarInstituciones());
        reporte.setNumPreselectos(dbms.consultarNumPreselectos());
        String path = Configuracion.getReportesPath() + reporte.getTipo() + reporte.getId() + ".pdf";
        try {
            reporte.generar(path);
            request.getSession().setAttribute("reporte", path);
            request.setAttribute("reporte", path);
            return mapping.findForward("pdf");
        } catch (Exception e) {
            reporte.setMensaje("Problemas con el servidor.");
            return mapping.findForward("failure");
        }
    }

    public ActionForward testCVS(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ReporteTestCompletado reporte = new ReporteTestCompletado();
        reporte.setNumAutenticacion();
        DataBaseManager dbms = DataBaseManager.getInstance();
        reporte.setAspirantesTestCompletos(dbms.consultarAspirantesTestCompletado());
        reporte.setInstituciones(dbms.consultarInstituciones());
        reporte.setNumPreselectos(dbms.consultarNumPreselectos());
        String path = Configuracion.getReportesPath() + reporte.getNumAutenticacion() + ".cvs";
        try {
            File file = new File(path);
            file.createNewFile();
            FileWriter fr = new FileWriter(file);
            fr.write("Cedula,Apellidos,Nombres,Correo, Promedio,Id de la institucion,Institucion \n");
            for (Aspirante a : reporte.getAspirantesTestCompletos()) {
                fr.write(a.getCedula() + "," + a.getApellidos() + "," + a.getNombres() + " , " + a.getCorreo()
                        + "," + a.getPromedio() + "," + a.getInstitucionId() + "," + reporte.getInstitucion(a.getInstitucionId()) + "\n");
            }
            fr.close();
            request.getSession().setAttribute("reporte", path);
            request.setAttribute("reporte", path);
            return mapping.findForward("cvs");
        } catch (Exception e) {
            reporte.setMensaje("Problemas con el servidor.");
            return mapping.findForward("failure");
        }
    }

    public ActionForward preinscritoAulaPDF(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ReporteTestCompletado reporte = new ReporteTestCompletado();
        DataBaseManager dbms = DataBaseManager.getInstance();
        reporte.setTipo(TipoReporte.ASPIRANTE);
        reporte.setNumAutenticacion();
        while (dbms.existeNumAutenticacion(reporte.getNumAutenticacion())) {
            reporte.setNumAutenticacion();
        }
        dbms.agregarReporte(reporte);
        reporte.setId(dbms.buscarID(reporte.getNumAutenticacion()));
        reporte.setAspirantesTestCompletos(dbms.consultarAspirantesTestCompletado());
        reporte.setInstituciones(dbms.consultarInstituciones());
        reporte.setNumPreselectos(dbms.consultarNumPreselectos());
        String path = Configuracion.getReportesPath() + reporte.getTipo() + reporte.getId() + ".pdf";
        try {
            reporte.generar(path);
            request.getSession().setAttribute("reporte", path);
            request.setAttribute("reporte", path);
            return mapping.findForward("pdf");
        } catch (Exception e) {
            reporte.setMensaje("Problemas con el servidor.");
            return mapping.findForward("failure");
        }
    }

    public ActionForward preinscritoAulaCVS(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ReporteTestCompletado reporte = new ReporteTestCompletado();
        reporte.setNumAutenticacion();
        DataBaseManager dbms = DataBaseManager.getInstance();
        reporte.setAspirantesTestCompletos(dbms.consultarAspirantesTestCompletado());
        reporte.setInstituciones(dbms.consultarInstituciones());
        reporte.setNumPreselectos(dbms.consultarNumPreselectos());
        String path = Configuracion.getReportesPath() + reporte.getNumAutenticacion() + ".cvs";
        try {
            File file = new File(path);
            file.createNewFile();
            FileWriter fr = new FileWriter(file);
            fr.write("Cedula,Apellidos,Nombres, Correo, Promedio,Id de la institucion,Institucion \n");
            for (Aspirante a : reporte.getAspirantesTestCompletos()) {
                fr.write(a.getCedula() + "," + a.getApellidos() + "," + a.getNombres() + "," + a.getCorreo()
                        + "," + a.getPromedio() + "," + a.getInstitucionId() + "," + reporte.getInstitucion(a.getInstitucionId()) + "\n");
            }
            fr.close();
            request.getSession().setAttribute("reporte", path);
            request.setAttribute("reporte", path);
            return mapping.findForward("cvs");
        } catch (Exception e) {
            reporte.setMensaje("Problemas con el servidor.");
            return mapping.findForward("failure");
        }
    }
}
